适用场景:
- 管理
~/.gitconfig、.zshrc、.vimrc、.zsh_extensions等 dotfiles- 使用 一个仓库 + 多 package(如 home / zsh / git)
- 目标目录是
$HOME
一、基本概念
- Stow 目录(stow dir):你的 HomeConfiguration 仓库根目录
- Package:仓库下的一级目录(如
home/、zsh/) - Target:符号链接要生成到的目录(通常是
$HOME)
📌 Stow 永远不会复制文件,只会创建 symlink
二、最常用命令
1️⃣ 将 package 链接到 $HOME
stow -t "$HOME" home
示例效果:
~/.zshrc -> HomeConfiguration/home/.zshrc
2️⃣ Dry-run
stow -n -v -t "$HOME" home
更详细(排错神器):
stow -n -vv -t "$HOME" home
3️⃣ 撤销(移除 symlink,不删真实文件)
stow -D -t "$HOME" home
三、冲突处理(非常重要)
4️⃣ 自动“收编”已有文件(adopt)
当 $HOME 下已经有 .zshrc、.bat 等普通文件时:
stow --adopt -t "$HOME" home
作用:
- 把
~/.xxx移入仓库home/.xxx - 再创建 symlink
⚠️ 用完一定要检查:
git diff
5️⃣ 指定覆盖规则(不常用,谨慎)
stow --override='.bat' -t "$HOME" home
仅对匹配的文件强制覆盖。
四、多 package 管理
6️⃣ 同时 stow 多个 package
stow -t "$HOME" home zsh git
7️⃣ 按顺序 stow(有依赖时)
stow -t "$HOME" home stow -t "$HOME" zsh
五、调试 & 排错命令
8️⃣ 查看 stow 详细执行过程
stow --debug -t "$HOME" home
9️⃣ 只测试单个文件(定位冲突)
stow -n -v -t "$HOME" home/.zshrc
🔟 查看版本(行为差异时很重要)
stow --version
六、自动化 & 脚本化(推荐)
11️⃣ 一键初始化脚本示例
#!/usr/bin/env bash
set -e
cd "$(dirname "$0")/.."
stow -nvv -t "$HOME" home
read -p "Proceed with stow? (y/N) " yn
[[ $yn == "y" ]] || exit 1
stow -vv -t "$HOME" home
12️⃣ 重置(常用于“全新机器”)
stow -D -t "$HOME" home
stow -t "$HOME" home
七、常见坑位(必看)
❌ 忘记指定 target
stow home # ❌ target 是仓库上级目录
✅ 永远显式指定
stow -t "$HOME" home
❌ HOME 下已有普通文件导致“什么都没生成”
解决方案之一:
stow -nvv -t "$HOME" home # 先看冲突
stow --adopt -t "$HOME" home # 或备份后再 stow
八、推荐固定用法(记住这三条)
# 预览(排错)
stow -nvv -t "$HOME" home
# 执行
stow -vv -t "$HOME" home
# 有旧文件时
stow --adopt -vv -t "$HOME" home